from enum import IntEnum
from typing import overload, NewType, Optional, Tuple

from OCC.Core.Standard import *
from OCC.Core.NCollection import *
from OCC.Core.BRepBuilderAPI import *
from OCC.Core.TopoDS import *
from OCC.Core.gp import *
from OCC.Core.Message import *
from OCC.Core.TopTools import *
from OCC.Core.Draft import *
from OCC.Core.Geom import *
from OCC.Core.GeomAbs import *
from OCC.Core.BRepFill import *
from OCC.Core.BRepOffset import *
from OCC.Core.BRepPrimAPI import *
from OCC.Core.GeomFill import *
from OCC.Core.Law import *
from OCC.Core.Approx import *

BRepOffsetAPI_Sewing = NewType("BRepOffsetAPI_Sewing", BRepBuilderAPI_Sewing)

class BRepOffsetAPI_SequenceOfSequenceOfReal:
    def Assign(self, theItem: TColStd_SequenceOfReal) -> TColStd_SequenceOfReal: ...
    def Clear(self) -> None: ...
    def First(self) -> TColStd_SequenceOfReal: ...
    def IsDeletables(self) -> bool: ...
    def IsEmpty(self) -> bool: ...
    def Last(self) -> TColStd_SequenceOfReal: ...
    def Length(self) -> int: ...
    def Lower(self) -> int: ...
    def Prepend(self, theItem: TColStd_SequenceOfReal) -> TColStd_SequenceOfReal: ...
    def RemoveFirst(self) -> None: ...
    def Reverse(self) -> None: ...
    def SetValue(self, theIndex: int, theValue: TColStd_SequenceOfReal) -> None: ...
    def Size(self) -> int: ...
    def UpdateUpperBound(self, int) -> None: ...
    def UpdateLowerBound(self, int) -> None: ...
    def Upper(self) -> int: ...
    def Value(self, theIndex: int) -> TColStd_SequenceOfReal: ...
    def __init__(self) -> None: ...
    def __len__(self) -> int: ...

class BRepOffsetAPI_SequenceOfSequenceOfShape:
    def Assign(self, theItem: TopTools_SequenceOfShape) -> TopTools_SequenceOfShape: ...
    def Clear(self) -> None: ...
    def First(self) -> TopTools_SequenceOfShape: ...
    def IsDeletables(self) -> bool: ...
    def IsEmpty(self) -> bool: ...
    def Last(self) -> TopTools_SequenceOfShape: ...
    def Length(self) -> int: ...
    def Lower(self) -> int: ...
    def Prepend(
        self, theItem: TopTools_SequenceOfShape
    ) -> TopTools_SequenceOfShape: ...
    def RemoveFirst(self) -> None: ...
    def Reverse(self) -> None: ...
    def SetValue(self, theIndex: int, theValue: TopTools_SequenceOfShape) -> None: ...
    def Size(self) -> int: ...
    def UpdateUpperBound(self, int) -> None: ...
    def UpdateLowerBound(self, int) -> None: ...
    def Upper(self) -> int: ...
    def Value(self, theIndex: int) -> TopTools_SequenceOfShape: ...
    def __init__(self) -> None: ...
    def __len__(self) -> int: ...

class BRepOffsetAPI_DraftAngle(BRepBuilderAPI_ModifyShape):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, S: TopoDS_Shape) -> None: ...
    def Add(
        self,
        F: TopoDS_Face,
        Direction: gp_Dir,
        Angle: float,
        NeutralPlane: gp_Pln,
        Flag: Optional[bool] = True,
    ) -> None: ...
    def AddDone(self) -> bool: ...
    def Build(
        self, theRange: Optional[Message_ProgressRange] = Message_ProgressRange()
    ) -> None: ...
    def Clear(self) -> None: ...
    def ConnectedFaces(self, F: TopoDS_Face) -> TopTools_ListOfShape: ...
    def CorrectWires(self) -> None: ...
    def Generated(self, S: TopoDS_Shape) -> TopTools_ListOfShape: ...
    def Init(self, S: TopoDS_Shape) -> None: ...
    def Modified(self, S: TopoDS_Shape) -> TopTools_ListOfShape: ...
    def ModifiedFaces(self) -> TopTools_ListOfShape: ...
    def ModifiedShape(self, S: TopoDS_Shape) -> TopoDS_Shape: ...
    def ProblematicShape(self) -> TopoDS_Shape: ...
    def Remove(self, F: TopoDS_Face) -> None: ...
    def Status(self) -> Draft_ErrorStatus: ...

class BRepOffsetAPI_FindContigousEdges:
    def __init__(
        self, tolerance: Optional[float] = 1.0e-06, option: Optional[bool] = True
    ) -> None: ...
    def Add(self, shape: TopoDS_Shape) -> None: ...
    def ContigousEdge(self, index: int) -> TopoDS_Edge: ...
    def ContigousEdgeCouple(self, index: int) -> TopTools_ListOfShape: ...
    def DegeneratedShape(self, index: int) -> TopoDS_Shape: ...
    def Dump(self) -> None: ...
    def Init(self, tolerance: float, option: bool) -> None: ...
    def IsDegenerated(self, shape: TopoDS_Shape) -> bool: ...
    def IsModified(self, shape: TopoDS_Shape) -> bool: ...
    def Modified(self, shape: TopoDS_Shape) -> TopoDS_Shape: ...
    def NbContigousEdges(self) -> int: ...
    def NbDegeneratedShapes(self) -> int: ...
    def Perform(self) -> None: ...
    def SectionToBoundary(self, section: TopoDS_Edge) -> TopoDS_Edge: ...

class BRepOffsetAPI_MakeDraft(BRepBuilderAPI_MakeShape):
    def __init__(self, Shape: TopoDS_Shape, Dir: gp_Dir, Angle: float) -> None: ...
    def Generated(self, S: TopoDS_Shape) -> TopTools_ListOfShape: ...
    @overload
    def Perform(self, LengthMax: float) -> None: ...
    @overload
    def Perform(
        self, Surface: Geom_Surface, KeepInsideSurface: Optional[bool] = True
    ) -> None: ...
    @overload
    def Perform(
        self, StopShape: TopoDS_Shape, KeepOutSide: Optional[bool] = True
    ) -> None: ...
    def SetDraft(self, IsInternal: Optional[bool] = False) -> None: ...
    def SetOptions(
        self,
        Style: Optional[BRepBuilderAPI_TransitionMode] = BRepBuilderAPI_RightCorner,
        AngleMin: Optional[float] = 0.01,
        AngleMax: Optional[float] = 3.0,
    ) -> None: ...
    def Shell(self) -> TopoDS_Shell: ...

class BRepOffsetAPI_MakeEvolved(BRepBuilderAPI_MakeShape):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(
        self,
        theSpine: TopoDS_Shape,
        theProfile: TopoDS_Wire,
        theJoinType: Optional[GeomAbs_JoinType] = GeomAbs_Arc,
        theIsAxeProf: Optional[bool] = True,
        theIsSolid: Optional[bool] = False,
        theIsProfOnSpine: Optional[bool] = False,
        theTol: Optional[float] = 0.0000001,
        theIsVolume: Optional[bool] = False,
        theRunInParallel: Optional[bool] = False,
    ) -> None: ...
    def Bottom(self) -> TopoDS_Shape: ...
    def Build(
        self, theRange: Optional[Message_ProgressRange] = Message_ProgressRange()
    ) -> None: ...
    def Evolved(self) -> BRepFill_Evolved: ...
    def GeneratedShapes(
        self, SpineShape: TopoDS_Shape, ProfShape: TopoDS_Shape
    ) -> TopTools_ListOfShape: ...
    def Top(self) -> TopoDS_Shape: ...

class BRepOffsetAPI_MakeFilling(BRepBuilderAPI_MakeShape):
    def __init__(
        self,
        Degree: Optional[int] = 3,
        NbPtsOnCur: Optional[int] = 15,
        NbIter: Optional[int] = 2,
        Anisotropie: Optional[bool] = False,
        Tol2d: Optional[float] = 0.00001,
        Tol3d: Optional[float] = 0.0001,
        TolAng: Optional[float] = 0.01,
        TolCurv: Optional[float] = 0.1,
        MaxDeg: Optional[int] = 8,
        MaxSegments: Optional[int] = 9,
    ) -> None: ...
    @overload
    def Add(
        self, Constr: TopoDS_Edge, Order: GeomAbs_Shape, IsBound: Optional[bool] = True
    ) -> int: ...
    @overload
    def Add(
        self,
        Constr: TopoDS_Edge,
        Support: TopoDS_Face,
        Order: GeomAbs_Shape,
        IsBound: Optional[bool] = True,
    ) -> int: ...
    @overload
    def Add(self, Support: TopoDS_Face, Order: GeomAbs_Shape) -> int: ...
    @overload
    def Add(self, Point: gp_Pnt) -> int: ...
    @overload
    def Add(
        self, U: float, V: float, Support: TopoDS_Face, Order: GeomAbs_Shape
    ) -> int: ...
    def Build(
        self, theRange: Optional[Message_ProgressRange] = Message_ProgressRange()
    ) -> None: ...
    @overload
    def G0Error(self) -> float: ...
    @overload
    def G0Error(self, Index: int) -> float: ...
    @overload
    def G1Error(self) -> float: ...
    @overload
    def G1Error(self, Index: int) -> float: ...
    @overload
    def G2Error(self) -> float: ...
    @overload
    def G2Error(self, Index: int) -> float: ...
    def Generated(self, S: TopoDS_Shape) -> TopTools_ListOfShape: ...
    def IsDone(self) -> bool: ...
    def LoadInitSurface(self, Surf: TopoDS_Face) -> None: ...
    def SetApproxParam(
        self, MaxDeg: Optional[int] = 8, MaxSegments: Optional[int] = 9
    ) -> None: ...
    def SetConstrParam(
        self,
        Tol2d: Optional[float] = 0.00001,
        Tol3d: Optional[float] = 0.0001,
        TolAng: Optional[float] = 0.01,
        TolCurv: Optional[float] = 0.1,
    ) -> None: ...
    def SetResolParam(
        self,
        Degree: Optional[int] = 3,
        NbPtsOnCur: Optional[int] = 15,
        NbIter: Optional[int] = 2,
        Anisotropie: Optional[bool] = False,
    ) -> None: ...

class BRepOffsetAPI_MakeOffset(BRepBuilderAPI_MakeShape):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(
        self,
        Spine: TopoDS_Face,
        Join: Optional[GeomAbs_JoinType] = GeomAbs_Arc,
        IsOpenResult: Optional[bool] = False,
    ) -> None: ...
    @overload
    def __init__(
        self,
        Spine: TopoDS_Wire,
        Join: Optional[GeomAbs_JoinType] = GeomAbs_Arc,
        IsOpenResult: Optional[bool] = False,
    ) -> None: ...
    def AddWire(self, Spine: TopoDS_Wire) -> None: ...
    def Build(
        self, theRange: Optional[Message_ProgressRange] = Message_ProgressRange()
    ) -> None: ...
    @staticmethod
    def ConvertFace(theFace: TopoDS_Face, theAngleTolerance: float) -> TopoDS_Face: ...
    def Generated(self, S: TopoDS_Shape) -> TopTools_ListOfShape: ...
    @overload
    def Init(
        self,
        Spine: TopoDS_Face,
        Join: Optional[GeomAbs_JoinType] = GeomAbs_Arc,
        IsOpenResult: Optional[bool] = False,
    ) -> None: ...
    @overload
    def Init(
        self,
        Join: Optional[GeomAbs_JoinType] = GeomAbs_Arc,
        IsOpenResult: Optional[bool] = False,
    ) -> None: ...
    def Perform(self, Offset: float, Alt: Optional[float] = 0.0) -> None: ...
    def SetApprox(self, ToApprox: bool) -> None: ...

class BRepOffsetAPI_MakeOffsetShape(BRepBuilderAPI_MakeShape):
    def __init__(self) -> None: ...
    def Build(
        self, theRange: Optional[Message_ProgressRange] = Message_ProgressRange()
    ) -> None: ...
    def Generated(self, S: TopoDS_Shape) -> TopTools_ListOfShape: ...
    def GetJoinType(self) -> GeomAbs_JoinType: ...
    def IsDeleted(self, S: TopoDS_Shape) -> bool: ...
    def MakeOffset(self) -> BRepOffset_MakeOffset: ...
    def Modified(self, S: TopoDS_Shape) -> TopTools_ListOfShape: ...
    def PerformByJoin(
        self,
        S: TopoDS_Shape,
        Offset: float,
        Tol: float,
        Mode: Optional[BRepOffset_Mode] = BRepOffset_Skin,
        Intersection: Optional[bool] = False,
        SelfInter: Optional[bool] = False,
        Join: Optional[GeomAbs_JoinType] = GeomAbs_Arc,
        RemoveIntEdges: Optional[bool] = False,
        theRange: Optional[Message_ProgressRange] = Message_ProgressRange(),
    ) -> None: ...
    def PerformBySimple(self, theS: TopoDS_Shape, theOffsetValue: float) -> None: ...

class BRepOffsetAPI_MakePipe(BRepPrimAPI_MakeSweep):
    @overload
    def __init__(self, Spine: TopoDS_Wire, Profile: TopoDS_Shape) -> None: ...
    @overload
    def __init__(
        self,
        Spine: TopoDS_Wire,
        Profile: TopoDS_Shape,
        aMode: GeomFill_Trihedron,
        ForceApproxC1: Optional[bool] = False,
    ) -> None: ...
    def Build(
        self, theRange: Optional[Message_ProgressRange] = Message_ProgressRange()
    ) -> None: ...
    def ErrorOnSurface(self) -> float: ...
    def FirstShape(self) -> TopoDS_Shape: ...
    @overload
    def Generated(self, S: TopoDS_Shape) -> TopTools_ListOfShape: ...
    @overload
    def Generated(
        self, SSpine: TopoDS_Shape, SProfile: TopoDS_Shape
    ) -> TopoDS_Shape: ...
    def LastShape(self) -> TopoDS_Shape: ...
    def Pipe(self) -> BRepFill_Pipe: ...

class BRepOffsetAPI_MakePipeShell(BRepPrimAPI_MakeSweep):
    def __init__(self, Spine: TopoDS_Wire) -> None: ...
    @overload
    def Add(
        self,
        Profile: TopoDS_Shape,
        WithContact: Optional[bool] = False,
        WithCorrection: Optional[bool] = False,
    ) -> None: ...
    @overload
    def Add(
        self,
        Profile: TopoDS_Shape,
        Location: TopoDS_Vertex,
        WithContact: Optional[bool] = False,
        WithCorrection: Optional[bool] = False,
    ) -> None: ...
    def Build(
        self, theRange: Optional[Message_ProgressRange] = Message_ProgressRange()
    ) -> None: ...
    def Delete(self, Profile: TopoDS_Shape) -> None: ...
    def ErrorOnSurface(self) -> float: ...
    def FirstShape(self) -> TopoDS_Shape: ...
    def Generated(self, S: TopoDS_Shape) -> TopTools_ListOfShape: ...
    def GetStatus(self) -> BRepBuilderAPI_PipeError: ...
    def IsReady(self) -> bool: ...
    def LastShape(self) -> TopoDS_Shape: ...
    def MakeSolid(self) -> bool: ...
    def Profiles(self, theProfiles: TopTools_ListOfShape) -> None: ...
    def SetDiscreteMode(self) -> None: ...
    def SetForceApproxC1(self, ForceApproxC1: bool) -> None: ...
    @overload
    def SetLaw(
        self,
        Profile: TopoDS_Shape,
        L: Law_Function,
        WithContact: Optional[bool] = False,
        WithCorrection: Optional[bool] = False,
    ) -> None: ...
    @overload
    def SetLaw(
        self,
        Profile: TopoDS_Shape,
        L: Law_Function,
        Location: TopoDS_Vertex,
        WithContact: Optional[bool] = False,
        WithCorrection: Optional[bool] = False,
    ) -> None: ...
    def SetMaxDegree(self, NewMaxDegree: int) -> None: ...
    def SetMaxSegments(self, NewMaxSegments: int) -> None: ...
    @overload
    def SetMode(self, IsFrenet: Optional[bool] = False) -> None: ...
    @overload
    def SetMode(self, Axe: gp_Ax2) -> None: ...
    @overload
    def SetMode(self, BiNormal: gp_Dir) -> None: ...
    @overload
    def SetMode(self, SpineSupport: TopoDS_Shape) -> bool: ...
    @overload
    def SetMode(
        self,
        AuxiliarySpine: TopoDS_Wire,
        CurvilinearEquivalence: bool,
        KeepContact: Optional[BRepFill_TypeOfContact] = BRepFill_NoContact,
    ) -> None: ...
    def SetTolerance(
        self,
        Tol3d: Optional[float] = 1.0e-4,
        BoundTol: Optional[float] = 1.0e-4,
        TolAngular: Optional[float] = 1.0e-2,
    ) -> None: ...
    def SetTransitionMode(
        self, Mode: Optional[BRepBuilderAPI_TransitionMode] = BRepBuilderAPI_Transformed
    ) -> None: ...
    def Simulate(self, NumberOfSection: int, Result: TopTools_ListOfShape) -> None: ...
    def Spine(self) -> TopoDS_Wire: ...

class BRepOffsetAPI_MiddlePath(BRepBuilderAPI_MakeShape):
    def __init__(
        self, aShape: TopoDS_Shape, StartShape: TopoDS_Shape, EndShape: TopoDS_Shape
    ) -> None: ...
    def Build(
        self, theRange: Optional[Message_ProgressRange] = Message_ProgressRange()
    ) -> None: ...

class BRepOffsetAPI_NormalProjection(BRepBuilderAPI_MakeShape):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, S: TopoDS_Shape) -> None: ...
    def Add(self, ToProj: TopoDS_Shape) -> None: ...
    def Ancestor(self, E: TopoDS_Edge) -> TopoDS_Shape: ...
    def Build(
        self, theRange: Optional[Message_ProgressRange] = Message_ProgressRange()
    ) -> None: ...
    def BuildWire(self, Liste: TopTools_ListOfShape) -> bool: ...
    def Compute3d(self, With3d: Optional[bool] = True) -> None: ...
    def Couple(self, E: TopoDS_Edge) -> TopoDS_Shape: ...
    def Generated(self, S: TopoDS_Shape) -> TopTools_ListOfShape: ...
    def Init(self, S: TopoDS_Shape) -> None: ...
    def IsDone(self) -> bool: ...
    def Projection(self) -> TopoDS_Shape: ...
    def SetLimit(self, FaceBoundaries: Optional[bool] = True) -> None: ...
    def SetMaxDistance(self, MaxDist: float) -> None: ...
    def SetParams(
        self,
        Tol3D: float,
        Tol2D: float,
        InternalContinuity: GeomAbs_Shape,
        MaxDegree: int,
        MaxSeg: int,
    ) -> None: ...

class BRepOffsetAPI_ThruSections(BRepBuilderAPI_MakeShape):
    def __init__(
        self,
        isSolid: Optional[bool] = False,
        ruled: Optional[bool] = False,
        pres3d: Optional[float] = 1.0e-06,
    ) -> None: ...
    def AddVertex(self, aVertex: TopoDS_Vertex) -> None: ...
    def AddWire(self, wire: TopoDS_Wire) -> None: ...
    def Build(
        self, theRange: Optional[Message_ProgressRange] = Message_ProgressRange()
    ) -> None: ...
    def CheckCompatibility(self, check: Optional[bool] = True) -> None: ...
    def Continuity(self) -> GeomAbs_Shape: ...
    def CriteriumWeight(self) -> Tuple[float, float, float]: ...
    def FirstShape(self) -> TopoDS_Shape: ...
    def Generated(self, S: TopoDS_Shape) -> TopTools_ListOfShape: ...
    def GeneratedFace(self, Edge: TopoDS_Shape) -> TopoDS_Shape: ...
    def GetStatus(self) -> BRepFill_ThruSectionErrorStatus: ...
    def Init(
        self,
        isSolid: Optional[bool] = False,
        ruled: Optional[bool] = False,
        pres3d: Optional[float] = 1.0e-06,
    ) -> None: ...
    def IsMutableInput(self) -> bool: ...
    def LastShape(self) -> TopoDS_Shape: ...
    def MaxDegree(self) -> int: ...
    def ParType(self) -> Approx_ParametrizationType: ...
    def SetContinuity(self, C: GeomAbs_Shape) -> None: ...
    def SetCriteriumWeight(self, W1: float, W2: float, W3: float) -> None: ...
    def SetMaxDegree(self, MaxDeg: int) -> None: ...
    def SetMutableInput(self, theIsMutableInput: bool) -> None: ...
    def SetParType(self, ParType: Approx_ParametrizationType) -> None: ...
    def SetSmoothing(self, UseSmoothing: bool) -> None: ...
    def UseSmoothing(self) -> bool: ...
    def Wires(self) -> TopTools_ListOfShape: ...

class BRepOffsetAPI_MakeThickSolid(BRepOffsetAPI_MakeOffsetShape):
    def __init__(self) -> None: ...
    def Build(
        self, theRange: Optional[Message_ProgressRange] = Message_ProgressRange()
    ) -> None: ...
    def MakeThickSolidByJoin(
        self,
        S: TopoDS_Shape,
        ClosingFaces: TopTools_ListOfShape,
        Offset: float,
        Tol: float,
        Mode: Optional[BRepOffset_Mode] = BRepOffset_Skin,
        Intersection: Optional[bool] = False,
        SelfInter: Optional[bool] = False,
        Join: Optional[GeomAbs_JoinType] = GeomAbs_Arc,
        RemoveIntEdges: Optional[bool] = False,
        theRange: Optional[Message_ProgressRange] = Message_ProgressRange(),
    ) -> None: ...
    def MakeThickSolidBySimple(
        self, theS: TopoDS_Shape, theOffsetValue: float
    ) -> None: ...
    def Modified(self, S: TopoDS_Shape) -> TopTools_ListOfShape: ...

# harray1 classes
# harray2 classes
# hsequence classes
